/*
 * StrategyG - Web System
 * Copyright 2011-2012
 * 
 * Autor		: Vanie Torres
 * Fecha Registro	: 07/12/2012 07:06:19 PM
 * Detalle		: ControlStrategyEjb
 */

package com.strategy.modulo.administracion.ejb;

import com.strategy.data.dao.DaoFormacion;
import com.strategy.data.dao.DaoPerfil;
import com.strategy.data.dao.DaoPersona;
import com.strategy.data.entity.Formacion;
import com.strategy.data.entity.Perfil;
import com.strategy.data.entity.PerfilDet;
import com.strategy.data.entity.Persona;
import com.strategy.data.util.AuditoriaData;
import com.strategy.modulo.administracion.bean.RegistroAdmFormacionBean;
import com.strategy.modulo.administracion.bean.RegistroAdmPerfilBean;
import com.strategy.modulo.administracion.bean.RegistroAdmPersonaBean;
import com.strategy.modulo.mantenimiento.dto.DatosFormacionJuegoDto;
import com.strategy.modulo.mantenimiento.dto.DatosGeneralesPerfilDto;
import com.strategy.modulo.mantenimiento.dto.DatosGeneralesPersonaDto;
import com.strategy.modulo.mantenimiento.dto.DatosPerfilDetDto;
import com.strategy.modulo.mantenimiento.dto.DatosPersonaDto;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.Stateless;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author VANIE
 */
@Stateless
public class ControlStrategyEjbBean implements ControlStrategyEjbRemote, ControlStrategyEjbLocal {
    
   @PersistenceContext(unitName = "StrategyG-PU")

    private EntityManager em;

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    public List<DatosGeneralesPersonaDto> consultarPersonaSuggestion(String tNombre) {

        System.out.println("BUSCAR NOMBRE EJB ::::::::::: " + tNombre);
        List<DatosGeneralesPersonaDto> lstDto = new LinkedList<DatosGeneralesPersonaDto>();
        DatosGeneralesPersonaDto dto = null;
        DaoPersona daoPersona = new DaoPersona(em);
        Integer nroDocumento = null;
        try {
            nroDocumento = Integer.parseInt(tNombre);
        } catch (NumberFormatException nfe) {
        }
        List<Persona> lstPersona = daoPersona.consultarPorNombreCompleto(tNombre);
        if (lstPersona != null && !lstPersona.isEmpty()) {
            for (Persona det : lstPersona) {
                dto = new DatosGeneralesPersonaDto();
                dto.setCodPersona(det.getCodigo());
                dto.setNombreCompleto(consultarNombreCompletoPersona(det.getCodigo()));
                lstDto.add(dto);
            }
        }
        return lstDto;
    }

    public String consultarNombreCompletoPersona(int tCodPersona) {

        String nombreCompleto = null;
        String apePaterno = null;
        String apeMaterno = null;
        String nombre1 = null;
        String nombre2 = null;
        Persona persona = em.find(Persona.class, tCodPersona);
        if (persona != null) {
            apePaterno = (persona.getApePaterno() != null) ? persona.getApePaterno() : "";
            apeMaterno = (persona.getApeMaterno() != null) ? persona.getApeMaterno() : "";
            nombre1 = (persona.getNombre1() != null)? persona.getNombre1() : "";
            nombre2 = (persona.getNombre2() != null)? persona.getNombre2() : "";
            nombreCompleto = apePaterno + " " + apeMaterno + ", " + nombre1 + " " + nombre2;
        }
        return nombreCompleto;
    }

    public DatosPersonaDto consultarPersonaPorCodigo(int tCodPersona) {

        DatosPersonaDto dto = null;
        Persona persona = em.find(Persona.class, tCodPersona);
        if (persona != null) {
            dto = new DatosPersonaDto();
            dto.setCodigoPersona(persona.getCodigo());
            dto.setApellidoPaterno(persona.getApePaterno());
            dto.setApellidoMaterno(persona.getApeMaterno());
            dto.setNombre1(persona.getNombre1());
            dto.setNombre2(persona.getNombre2());
            dto.setCelular1(persona.getCelular1());
            dto.setCelular2(persona.getCelular2());
            dto.setDireccion(persona.getDireccion());
            dto.setFechaNacimiento(persona.getFechaNacimiento());
            dto.setSexo(persona.getSexo());
            dto.setTelefono(persona.getTelefono());
            dto.setDistrito(persona.getDistrito());
        }
        return dto;
    }

    public int registrarActualizarDatosPersona(RegistroAdmPersonaBean tRegistro, AuditoriaData tAuditoria) {

        Date hoy = new Date();
        int codPersona = 0;
        Persona persona = em.find(Persona.class, tRegistro.getCodPersona());
        if (persona == null) {
            persona = new Persona();
            persona.setRegistroFecha(hoy);
            persona.setRegistroUsr(tAuditoria.getUsuario());
            persona.setRegistroIp(tAuditoria.getIp());
        }
        persona.setApePaterno(tRegistro.getApePaterno().toUpperCase());
        persona.setApeMaterno(tRegistro.getApeMaterno().toUpperCase());
        persona.setNombre1(tRegistro.getNombre1().toUpperCase());
        persona.setNombre2(tRegistro.getNombre2().toUpperCase());
        persona.setCelular1(tRegistro.getCelular1());
        persona.setCelular2(tRegistro.getCelular2());
        persona.setDireccion(tRegistro.getDireccion().toUpperCase());
        persona.setFechaNacimiento(tRegistro.getFecNacimiento());
        persona.setDistrito(tRegistro.getDistrito().toUpperCase());
        persona.setSexo(tRegistro.getSexo());
        persona.setTelefono(tRegistro.getTelefono());
        persona.setAuditoriaFecha(hoy);
        persona.setAuditoriaUsr(tAuditoria.getUsuario());
        persona.setAuditoriaIp(tAuditoria.getIp());
        em.persist(persona);
        codPersona = persona.getCodigo();
        return codPersona;
    }

    public List<DatosGeneralesPerfilDto> consultarPerfilSuggestion(String tNombre) {

        System.out.println("BUSCAR NOMBRE EJB ::::::::::: " + tNombre);
        List<DatosGeneralesPerfilDto> lstDto = new LinkedList<DatosGeneralesPerfilDto>();
        DatosGeneralesPerfilDto dto = null;
        DaoPerfil daoPerfil = new DaoPerfil(em);
        List<Perfil> lstPerfil = daoPerfil.consultarPorDescripcionPerfil(tNombre);
        if (lstPerfil != null && !lstPerfil.isEmpty()) {
            for (Perfil det : lstPerfil) {
                dto = new DatosGeneralesPerfilDto();
                dto.setCodPerfil(det.getCodigo());
                dto.setDscPerfil(det.getDescripcion());
                lstDto.add(dto);
            }
        }
        return lstDto;
    }

    public DatosGeneralesPerfilDto consultarDatosPerfilPorCodigo(int tcodPerfil) {

        System.out.println("BUSCAR NOMBRE EJB ::::::::::: " + tcodPerfil);
        DatosGeneralesPerfilDto dto = new DatosGeneralesPerfilDto();
        List<DatosPerfilDetDto> lstDetPerfil = new LinkedList<DatosPerfilDetDto>();
        DatosPerfilDetDto regDetPerfil = null;
        DaoPerfil daoPerfil = new DaoPerfil(em);
        Perfil perfil = em.find(Perfil.class, tcodPerfil);
        if (perfil != null) {
            dto.setCodPerfil(perfil.getCodigo());
            dto.setDscPerfil(perfil.getDescripcion());
        }
        List<PerfilDet> lstPerfilCap = daoPerfil.consultarCapacidadesPorPerfilCod(tcodPerfil);
        if (lstPerfilCap != null && !lstPerfilCap.isEmpty()) {
            for (PerfilDet det : lstPerfilCap) {
                regDetPerfil = new DatosPerfilDetDto();
                regDetPerfil.setTipo(1);
                regDetPerfil.setCodTipo(det.getTipoCodigo());
                regDetPerfil.setValMin(det.getValorMin());
                regDetPerfil.setValMax(det.getValorMax());
                lstDetPerfil.add(regDetPerfil);
            }
        }
        List<PerfilDet> lstPerfilFun = daoPerfil.consultarFundamentoPorPerfilCod(tcodPerfil);
        if (lstPerfilFun != null && !lstPerfilFun.isEmpty()) {
            for (PerfilDet det : lstPerfilFun) {
                regDetPerfil = new DatosPerfilDetDto();
                regDetPerfil.setTipo(2);
                regDetPerfil.setCodTipo(det.getTipoCodigo());
                regDetPerfil.setValMin(det.getValorMin());
                regDetPerfil.setValMax(det.getValorMax());
                lstDetPerfil.add(regDetPerfil);
            }
        }
        dto.setDetallePerfil(lstDetPerfil);
        return dto;
    }

    public int registrarActualizarDatosPerfil(RegistroAdmPerfilBean tRegistro, AuditoriaData tAuditoria) {

        Date hoy = new Date();
        int codPerfil = 0;
        DaoPerfil daoPerfil = new DaoPerfil(em);
        Perfil perfil = em.find(Perfil.class, tRegistro.getCodPerfil());
        if (perfil == null) {
            perfil = new Perfil();
            perfil.setRegistroFecha(hoy);
            perfil.setRegistroUsr(tAuditoria.getUsuario());
            perfil.setRegistroIp(tAuditoria.getIp());
        }
        perfil.setDescripcion(tRegistro.getDescripcion().toUpperCase());
        perfil.setAuditoriaFecha(hoy);
        perfil.setAuditoriaUsr(tAuditoria.getUsuario());
        perfil.setAuditoriaIp(tAuditoria.getIp());
        em.persist(perfil);
        codPerfil = perfil.getCodigo();
        PerfilDet perfilDet = null;
        perfilDet = daoPerfil.consultarCapacidadPerfilPorPerfilCodTipoCod(codPerfil, 1);
        if (perfilDet == null) {
            perfilDet = new PerfilDet();
            perfilDet.setPerfilCodigo(codPerfil);
            perfilDet.setTipo(1);
            perfilDet.setTipoCodigo(1);
            perfilDet.setRegistroFecha(hoy);
            perfilDet.setRegistroUsr(tAuditoria.getUsuario());
            perfilDet.setRegistroIp(tAuditoria.getIp());
        } else {

        }
        return codPerfil;
    }

    public DatosFormacionJuegoDto consultarDatosFormJuego(int codFormacion) {

        DatosFormacionJuegoDto dto = new DatosFormacionJuegoDto();
        Formacion formacion = em.find(Formacion.class, codFormacion);
        if (formacion != null) {
            System.out.println("DESCRIPCION :::::::::: " + formacion.getDescripcion());
            dto.setDscFormacion(formacion.getDescripcion());
            dto.setCodCategoria(formacion.getCategoria());
            dto.setCodTactica(formacion.getTactica());
            dto.setDscCategoria("");
            dto.setDscTactica("");
        }
        return dto;
    }

    public List<SelectItem> consultarSiFormacion() {

        List<SelectItem> selectItem = new LinkedList<SelectItem>();
        DaoFormacion daoForma = new DaoFormacion(em);
        List<Formacion> lstFormacion = daoForma.consultarTodosActivos();
        if (lstFormacion != null && !lstFormacion.isEmpty()) {
            for (Formacion det : lstFormacion) {
                SelectItem item = new SelectItem();
                item.setValue(det.getCodigo());
                item.setLabel(det.getDescripcion());
                selectItem.add(item);
            }
        }
        return selectItem;
    }

    public int registrarDatosFormacion(RegistroAdmFormacionBean registro, AuditoriaData auditoria) {

        int codFormacion = 0;
        Date hoy = new Date();
        Formacion formacion = em.find(Formacion.class, registro.getCodFormacion());
        if (formacion == null) {
            formacion = new Formacion();
            formacion.setRegistroFecha(hoy);
            formacion.setRegistroIp(auditoria.getIp());
            formacion.setRegistroUsr(auditoria.getUsuario());
            formacion.setEstado(1);
        } 
        formacion.setAlineacion(registro.getCodAlineacion());
        formacion.setCategoria(registro.getCodCategoria());
        formacion.setDescripcion(registro.getDescripcion().toUpperCase());
        formacion.setNivelExperiencia(registro.getCodExperiencia());
        formacion.setTactica(registro.getCodTactica());
        formacion.setObservacion(registro.getObservacion().toUpperCase());
        formacion.setAuditoriaFecha(hoy);
        formacion.setAuditoriaIp(auditoria.getIp());
        formacion.setAuditoriaUsr(auditoria.getUsuario());
        em.persist(formacion);
        codFormacion = formacion.getCodigo();
        return codFormacion;
    }

    public RegistroAdmFormacionBean consultarDatosFormacion(int codFormacion) {

        RegistroAdmFormacionBean dto = new RegistroAdmFormacionBean();
        Formacion formacion = em.find(Formacion.class, codFormacion);
        if (formacion != null) {
            dto.setCodAlineacion(formacion.getAlineacion());
            dto.setCodCategoria(formacion.getCategoria());
            dto.setDescripcion(formacion.getDescripcion());
            dto.setCodExperiencia(formacion.getNivelExperiencia());
            dto.setCodTactica(formacion.getTactica());
            dto.setObservacion(formacion.getObservacion());
        }
        return dto;
    }
}
